/**
 * 环境配置工具
 */

// 环境类型定义
export type EnvType = 'dev' | 'staging' | 'prod';

// 环境配置接口
export interface EnvConfig {
  baseURL: string;
  tsToken: string;
}

// 环境配置映射
export const ENV_CONFIGS: Record<EnvType, EnvConfig> = {
  dev: {
    baseURL: 'https://bifrost.billionsat.com',
    tsToken: '', // 开发环境tsToken
  },
  staging: {
    baseURL: 'https://bifrost.billionsat.com',
    tsToken: '', // 测试环境tsToken
  },
  prod: {
    baseURL: 'https://bifrost.billionsat.com',
    tsToken: '', // 生产环境tsToken
  }
};

/**
 * 获取当前环境
 */
export const getCurrentEnv = (): EnvType => {
  // 优先使用 VITE_APP_ENV，如果没有则使用 import.meta.env.MODE
  const env = import.meta.env.VITE_APP_ENV || import.meta.env.MODE || 'dev';
  
  // 确保返回的环境类型是有效的
  const validEnvs: EnvType[] = ['dev', 'staging', 'prod'];
  if (validEnvs.includes(env as EnvType)) {
    return env as EnvType;
  }
  
  // 如果环境类型无效，默认返回 dev
  console.warn(`无效的环境类型: ${env}，使用默认环境: dev`);
  return 'dev';
};

/**
 * 获取环境配置
 */
export const getEnvConfig = (env?: EnvType): EnvConfig => {
  const currentEnv = env || getCurrentEnv();
  const config = ENV_CONFIGS[currentEnv];
  
  // 如果配置不存在，返回默认配置
  if (!config) {
    console.warn(`环境配置不存在: ${currentEnv}，使用默认配置`);
    return ENV_CONFIGS.dev;
  }
  
  return config;
};

/**
 * 检查是否为开发环境
 */
export const isDev = (): boolean => {
  // 在开发模式下，import.meta.env.DEV 为 true
  if (import.meta.env.DEV) {
    return true;
  }
  // 检查环境变量
  return getCurrentEnv() === 'dev';
};

/**
 * 检查是否为测试环境
 */
export const isStaging = (): boolean => {
  return getCurrentEnv() === 'staging';
};

/**
 * 检查是否为生产环境
 */
export const isProd = (): boolean => {
  // 在生产模式下，import.meta.env.PROD 为 true
  if (import.meta.env.PROD) {
    return true;
  }
  // 检查环境变量
  return getCurrentEnv() === 'prod';
};

/**
 * 获取API基础URL
 */
export const getApiBaseURL = (): string => {
  try {
    return import.meta.env.VITE_API_BASE_URL || getEnvConfig().baseURL;
  } catch (error) {
    console.error('获取API基础URL失败:', error);
    return 'https://bifrost.billionsat.com'; // 默认值
  }
};

/**
 * 获取tsToken
 */
export const getTsToken = (): string => {
  try {
    return import.meta.env.VITE_TS_TOKEN || getEnvConfig().tsToken;
  } catch (error) {
    console.error('获取tsToken失败:', error);
    return ''; // 默认值
  }
};
